﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ShopNet.Model;
using ShopNet.Util;

namespace ShopNet.Admin
{
    public partial class ListarProdutos : System.Web.UI.Page
    {
        #region CarregarGrid

        private void CarregarGrid(string nome = "", string categoria = "")
        {
            var lista = from p in NServico.Db.Produtos select p;
            if (!string.IsNullOrEmpty(categoria))
            {
                lista = lista.Where(p => p.IdCategoria == int.Parse(categoria));
            }
            if (!string.IsNullOrEmpty(nome))
            {
                lista = lista.Where(p => p.Nome.Contains(nome) || p.Descricao.Contains(nome));
            }
            
            
            gvProdutos.DataSource = lista;
            gvProdutos.DataBind();
            Session.Add("lista", lista);
        }

        #endregion

        #region Page_Load

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                CarregarGrid();
                CarregarCategoria();
            }

        }

        private void CarregarCategoria()
        {
            ddlCategoria.Items.Clear();
            ddlCategoria.DataSource = NServico.Db.Categorias.Select(c => c);
            ddlCategoria.DataTextField = "Descricao";
            ddlCategoria.DataValueField = "IdCategoria";
            ddlCategoria.DataBind();
            ddlCategoria.Items.Insert(0, new ListItem("Selecione...", string.Empty));
        }

        #endregion

        #region DeleteFile

        private void DeleteFile(string strFileName)
        {//Delete file from the server
            if (strFileName.Trim().Length > 0)
            {
                FileInfo fi = new FileInfo(strFileName);
                if (fi.Exists)//if file exists delete it
                {
                    fi.Delete();
                }
            }
        }

        #endregion

        #region gvprodutos_OnRowEditing

        protected void gvprodutos_OnRowEditing(object sender, GridViewEditEventArgs e)
        {
            var lista = ((IQueryable<Produto>) Session["lista"]).ToList();
            Produto p = lista[e.NewEditIndex];
            Response.Redirect(string.Format("EditarProduto.aspx?IdProduto={0}", p.IdProduto), true);
        }

        #endregion

        #region bIncluir_OnClick

        protected void bIncluir_OnClick(object sender, EventArgs e)
        {
            Response.Redirect("EditarProduto.aspx", true);
        }

        #endregion

        #region gvProdutos_OnRowDeleting

        protected void gvProdutos_OnRowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            ImageButton lDelete = (ImageButton) gvProdutos.Rows[e.RowIndex].FindControl("lDelete");
            Produto prod = NServico.Db.Produtos.FirstOrDefault(p => p.IdProduto == int.Parse(lDelete.CommandArgument));

            foreach (var i in NServico.Db.Imagems.Where(p => p.IdProduto == prod.IdProduto))
            {
                NServico.Db.Imagems.DeleteOnSubmit(i);
                string sFileName = i.Nome;
                const string sFileDir = "../Imagem/produtos/";
                DeleteFile(sFileDir + sFileName);
            }

            if (prod.IdProduto > 0)
            {
                NServico.Db.Produtos.DeleteOnSubmit(prod);
            }

            NServico.Db.SubmitChanges();
            Funcoes.Mensagem(Funcoes.TipoMensagem.Ok, spamMensagem, "Produto Excluído Com sucesso.");
            CarregarGrid();
        }

        #endregion

        #region gvProdutos_OnPageIndexChanging

        protected void gvProdutos_OnPageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvProdutos.PageIndex = e.NewPageIndex;
            CarregarGrid();
        }

        #endregion

        #region gvProdutos_OnRowCommand

        protected void gvProdutos_OnRowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName=="Editar")
            {
                Response.Redirect(string.Format("EditarProduto.aspx?IdProduto={0}", e.CommandArgument), true);

            }
        }

        #endregion
        
        #region bBuscar_Click

        protected void bBuscar_Click(object sender, EventArgs e)
        {
            CarregarGrid(tbNomeDesc.Text, ddlCategoria.SelectedValue);
        }

        #endregion


        #region gvProdutos_OnRowDataBound

        protected void gvProdutos_OnRowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType != DataControlRowType.DataRow) return;

            Label lPrecoPacote = e.Row.FindControl("lPrecoPacote") as Label;
            Label lPrecoUnitario = e.Row.FindControl("lPrecoUnitario") as Label;
            Label lprecoDesconto = e.Row.FindControl("lprecoDesconto") as Label;
            Label lPeso = e.Row.FindControl("lPeso") as Label;

            Produto p = e.Row.DataItem as Produto;

            lprecoDesconto.Text = p.precoDesconto.ToString("#0.00").Replace(".", ",");
            lPrecoPacote.Text = p.PrecoPacote.ToString("#0.00").Replace(".", ",");
            lPrecoUnitario.Text = p.PrecoUnitario.ToString("#0.00").Replace(".", ",");
            lPeso.Text = p.Peso.ToString("#0.00###").Replace(".", ",");

        }

        #endregion

    }
}